package com.game.ball;

import java.awt.*;

/**
 * 代表游戏中的小球。
 * <p>
 * 这个类负责管理小球的位置、移动和绘制。
 */
public class Ball {
    private double x, y;
    private double dx, dy;
    private final int size;

    /**
     * 构造一个新的小球对象。
     *
     * @param x   小球的初始 X 坐标
     * @param y   小球的初始 Y 坐标
     * @param size 小球的大小（宽度和高度）
     */
    public Ball(int x, int y, int size) {
        this.x = x;
        this.y = y;
        this.size = size;
        reset();
    }

    /**
     * 重置小球的位置和速度。
     * <p>
     * 小球将被放置在屏幕中央，并随机选择一个水平方向的速度。
     */
    public void reset() {
        x = Constants.WIDTH / 2 - size / 2;
        y = Constants.HEIGHT / 2 - size / 2;
        dx = 3.0 * (Math.random() > 0.5 ? 1 : -1);
        dy = -4.0;
    }

    /**
     * 移动小球。
     * <p>
     * 更新小球的位置，并处理与屏幕边界的碰撞。
     */
    public void move() {

        x += dx;
        y += dy;

        if (x < 0 || x + size > Constants.WIDTH) {
            dx = -dx;
        }
        if (y < 0) {
            dy = -dy;
        }
    }

    /**
     * 绘制小球。
     *
     * @param g 用于绘制的 Graphics 对象
     */
    public void draw(Graphics g) {
        g.setColor(Color.WHITE);
        g.fillOval((int) x, (int) y, size, size);
    }

    /**
     * 获取小球的边界矩形。
     *
     * @return 小球的边界矩形
     */
    public Rectangle getBounds() {
        return new Rectangle((int) x, (int) y, size, size);
    }

    /**
     * 设置小球的垂直速度。
     *
     * @param dy 新的垂直速度
     */
    public void setDy(double dy) {
        this.dy = dy;
    }

    /**
     * 获取小球的 X 坐标。
     *
     * @return 小球的 X 坐标
     */
    public double getX() {
        return x;
    }

    /**
     * 获取小球的 Y 坐标。
     *
     * @return 小球的 Y 坐标
     */
    public double getY() {
        return y;
    }

    public double getDy() {
        return dy;
    }

    public double getDx() {
        return dx;
    }

    public void setDx(double dx) {
        this.dx = dx;
    }
}